/**
 * techforce-blog-full-screan
 * @name techforce-blog-full-screan
 * @author zhuyuchao - http://ioteam.zjgsu.edu.cn/blog
 * @version 0.1
 */

$(document).ready(function() {
	var maskHeight = $(document).height() - 100;
   var maskWidth = $(window).width() - 100;
   $("#view_frame").before("<button id='view-button'>全屏显示</button><br/>");
   $("#view-button").wBox({
                //opacity:0,
                drag: false,
                requestType: "iframe",
                iframeWH: {
                    width: maskWidth,
                    height: maskHeight
                },
                title: "<div class='demo'>wBox功能简介部分的层</div>",
                target: "http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/Dojo.pdf"
            });
	});

(function($){
    //class为.wBox_close为关闭
    $.fn.wBox = function(options){
        var defaults = {
            wBoxURL: "",
            opacity: 0.5,//背景透明度
            callBack: null,
            noTitle: false,
			show:false,
			timeout:0,
			target:null,
			requestType:null,//iframe,ajax,img
            title: "wBox Title",
			drag:true,
			iframeWH: {//iframe 设置高宽
                width: 400,
                height: 300
            },
            html: ''//wBox内容
        },_this=this;
		this.YQ = $.extend(defaults, options);
        var  wBoxHtml = '<div id="wBox" style="position: absolute;top: 0;left: 0;z-index: 1000;text-align: left;display: none;"><div style="position: relative;"><table style="border-collapse: collapse;border-spacing: 0;"><tbody><tr><td class="wBox_tl" style="border-bottom: 0;padding: 0;height: 10px;width: 10px;overflow: hidden;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;"/><td style="border-bottom: 0;padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);width: 10px;height: 10px;width: 10px;overflow: hidden;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;"/><td class="wBox_tr" style="border-bottom: 0;padding: 0;height: 10px;width: 10px;overflow: hidden;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;"/></tr><tr><td style="border-bottom: 0;padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);width: 10px;height: 10px;width: 10px;overflow: hidden;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;"><div style="width:10px;">&nbsp;</div></td><td style="border-bottom: 0;padding: 0;"><div style="background-color: #ffffff;border: 1px solid #4D7BE0;">' +
		 (_this.YQ.noTitle ? '' : '<table style="height: 28px;color: #000000;width: 100%;background: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/titleBG.png) repeat-x;"><tr><td class="wBox_dragTitle" style="border-bottom: 0;padding: 0;"><div style="padding-left: 5px;overflow: hidden;font-size: 14px;font-weight: bold;">' +
		 _this.YQ.title + '</div></td><td width="20px" title="关闭" style="border-bottom: 0;padding: 0;"><div id="wBox_close" style="background: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/close.png) no-repeat 0 0;height: 14px;width: 14px;overflow: hidden;cursor: pointer;"></div></td></tr></table> ') +
        '<div class="wBox_content" id="wBoxContent" style="padding: 3px;"></div></div></td><td style="border-bottom: 0;padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);width: 10px;"><div style="width:10px;">&nbsp;</div></td></tr><tr><td class="wBox_bl" style="border-bottom: 0;padding: 0;height: 10px;width: 10px;overflow: hidden;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;/><td style="border-bottom: 0;padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);width: 10px;"/><td class="wBox_br" style="border-bottom: 0;padding: 0;filter: alpha(opacity = 80);-moz-opacity: 0.8;opacity: 0.8;background-image: url(http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/wbox.gif);width: 10px;"/></tr></tbody></table></div></div>', B = null, C = null, $win = $(window),$t=$(this);//B背景，C内容jquery div   
        this.showBox=function (){
            $("#wBox_overlay").remove();
			$("#wBox").remove();
            
            B = $("<div id='wBox_overlay' style='z-index: -100;position: absolute;top: 0px;left: 0px;height: 100%;width: 100%;'></div>").hide().css({'opacity':_this.YQ.opacity,'background-color': '#FFF','z-index': 999}).dblclick(function(){
                _this.close();
            }).appendTo('body').fadeIn(300);
            C = $(wBoxHtml).appendTo('body');
            handleClick();
        }
        /*
         * 处理点击
         * @param {string} what
         */
        function handleClick(){
            var con = C.find("#wBoxContent");
			if (_this.YQ.requestType && $.inArray(_this.YQ.requestType, ['iframe', 'ajax','img'])!=-1) {
				con.html("<div style='width: 270px;'><div id='wBox_loading' stype='width: 32px;height: 32px;margin: 0 auto;'><img style='border: 0;margin: 0;' src='"+_this.YQ.wBoxURL+"http://ioteam.zjgsu.edu.cn/blog/wp-content/uploads/2012/02/loading.gif' /></div></div>");				
				if (_this.YQ.requestType === "img") {
					var img = $("<img />");
					img.attr("src",_this.YQ.target);
					img.load(function(){
						img.appendTo(con.empty());
						setPosition();
					});
				}
				else 
					if (_this.YQ.requestType === "ajax") {
						$.get(_this.YQ.target, function(data){
							con.html(data);
							C.find('#wBox_close').click(_this.close);
							setPosition();
						})
						
					}
					else {
						ifr = $("<iframe name='wBoxIframe' style='width:" + _this.YQ.iframeWH.width + "px;height:" + _this.YQ.iframeWH.height + "px;' scrolling='auto' frameborder='0' src='" + _this.YQ.target + "'></iframe>");
						ifr.appendTo(con.empty());
						ifr.load(function(){
							try {
								$it = $(this).contents();
								$it.find('#wBox_close').click(_this.close);
								fH = $it.height();//iframe height
								fW = $it.width();
								w = $win;
								newW = Math.min(w.width() - 40, fW);
								newH = w.height() - 25 - (_this.YQ.noTitle ? 0 : 30);
								newH = Math.min(newH, fH);
								if (!newH) 
									return;
								var lt = calPosition(newW);
								C.css({
									left: lt[0],
									top: lt[1]
								});
								
								$(this).css({
									height: newH,
									width: newW
								});
							} 
							catch (e) {
							}
						});
					}
				
			}
			else 
				if (_this.YQ.target) {
					$(_this.YQ.target).clone(true).show().appendTo(con.empty());
					
				}
				else 
					if (_this.YQ.html) {
						con.html(_this.YQ.html);
					}
					else {
						$t.clone(true).show().appendTo(con.empty());
					}         
            afterHandleClick();
        }
        /*
         * 处理点击之后的处理
         */
        function afterHandleClick(){     
            setPosition();
            C.show().find('#wBox_close').click(_this.close).hover(function(){
                $(this).css("background-position","0 -14px");
            }, function(){
                $(this).removeClass("on");
            });
            $(document).unbind('keydown.wBox').bind('keydown.wBox', function(e){
                if (e.keyCode === 27) 
                    _this.close();
                return true
            });
            typeof _this.YQ.callBack === 'function' ? _this.YQ.callBack() : null;
            !_this.YQ.noTitle&&_this.YQ.drag?drag():null;
			if(_this.YQ.timeout){
                setTimeout(_this.close,_this.YQ.timeout);
            }
				
        }
        /*
         * 设置wBox的位置
         */
        function setPosition(){
            if (!C) {
                return false;
            }
			
            var width = C.width(),  lt = calPosition(width);
            C.css({
                left: lt[0],
                top: 0
            });
            var $h = $("body").height(), $wh = $win.height(),$hh=$("html").height();
            $h = Math.max($h, $wh);
            B.height($h).width($win.width())            
        }
        /*
         * 计算wBox的位置
         * @param {number} w 宽度
         */
        function calPosition(w){
            l = ($win.width() - w) / 2;
            t = $win.scrollTop() + $win.height() /9;
            return [l, t];
        }
        /*
         * 拖拽函数drag
         */
        function drag(){
            var dx, dy, moveout;
            var T = C.find('.wBox_dragTitle').css('cursor', 'move');
            T.bind("selectstart", function(){
                return false;
            });
            
            T.mousedown(function(e){
                dx = e.clientX - parseInt(C.css("left"));
                dy = e.clientY - parseInt(C.css("top"));
                C.mousemove(move).mouseout(out).css('opacity', 0.8);
                T.mouseup(up);
            });
            /*
             * 移动改变生活
             * @param {Object} e 事件
             */
            function move(e){
                moveout = false;
                if (e.clientX - dx < 0) {
                    l = 0;
                }
                else 
                    if (e.clientX - dx > $win.width() - C.width()) {
                        l = $win.width() - C.width();
                    }
                    else {
                        l = e.clientX - dx
                    }
                C.css({
                    left: l,
                    top: e.clientY - dy
                });
                
            }
            /*
             * 你已经out啦！
             * @param {Object} e 事件
             */
            function out(e){
                moveout = true;
                setTimeout(function(){
                    moveout && up(e);
                }, 10);
            }
            /*
             * 放弃
             * @param {Object} e事件
             */
            function up(e){
                C.unbind("mousemove", move).unbind("mouseout", out).css('opacity', 1);
                T.unbind("mouseup", up);
            }
        }
        
        /*
         * 关闭弹出框就是移除还原
         */
        this.close=function (){
            if (C) {
                B.remove();
                C.stop().fadeOut(300, function(){
                    C.remove();
                })
            }
        }
        /*
         * 触发click事件
         */		
        $win.resize(function(){
            setPosition();
        });
		_this.YQ.show?_this.showBox():$t.click(function(){
            _this.showBox();
            return false;
        });
		return this;
    };
})(jQuery);
